'''
os.walk(目录名称)
    递归获取目录下所有文件 ls -R
    generator :生成器，里面包括返回的信息
    通过遍历来查看
重命名：
os.rename("old", "new")

hashlib模块的使用
    对文件做MD5校验
import hashlib
m = hashlib.md5()
m.update(b"Nobody inspects")
m.update(b"asdaswasd")  update支持续传

os.path/exists(文件名称)

异常捕获的语法：
    可以通过一种语法来捕获提前捕获这个报错，然后按自己的代码产生一个信息
try:
    关键性代码   捕获这行代码可能出现的报错信息；
except 异常名称 as e:
    操作
except 异常名称 as e:
    操作

    三方模块: pypi.org
    pip install 模块名称

Python的虚拟环境：（一个虚拟环境就是一个文件夹）
    venv: 为了避免开发环境混乱
    能起到一定的隔离作用，建议一个项目一个虚拟环境
1、创建
    python -m venv 默认在本目录下
2、切换和退出虚拟环境
    运行venv/Scripts/active:切换到这个虚拟环境
    deactivated
'''
import os
import datetime
import shutil
import hashlib

#获得文件的绝对路径
def file_path(path):
    import os
    f_list = []
    file_name = os.walk(path)
    for file_path,directory_name,file01_name in file_name:
        for f_name in file01_name:
            if len(f_name) > 0:
                name_f = file_path + "\\" + f_name
                f_list.append(name_f)
    return f_list

#为文件重命名
def Modify_file_name():
    import os
    import datetime
    file_path_name = file_path(r'D:\PythonProject\python-learn\北京')
    date_time = datetime.datetime.now().strftime("_%Y_%m_%d")
    for old_name in file_path_name:
        new_path = old_name.split(".")[0]
        new_file = old_name.split(".")[-1]
        new_file_name = new_path + date_time + "." + new_file
        os.rename(old_name, new_file_name)

# 文件MD5校验  md5sum 文件名称
def md5_file(file):
    import hashlib
    md5 = hashlib.md5()
    with open(file, mode="rb") as fobj:
        for line in fobj:
            md5.update(line)
    return md5.hexdigest()

def Data_diff_comparison():
    for src_file in file_path(r'D:\PythonProject\python-learn\北京'):
        drc_file = src_file.replace("北京","上海")
        if not os.path.exists(drc_file):
            print("文件{%s} 文件丢失" % drc_file)
            shutil.copy(src_file, drc_file)
        else:
            md5_src_file = md5_file(src_file)
            md5_drc_file = md5_file(drc_file)
            if md5_drc_file != md5_src_file:
                print("文件[%s]数据不完整" % drc_file)
                shutil.copy(src_file, drc_file)

if __name__ == '__main__':
    Data_diff_comparison()

